﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using LM.InterfacesFabricas.DTOs;
using LM.InterfacesFabricas.Interfaces.Servicos;
using LM.InterfacesFabricas.Utilidades;
using LM.Negocio.Objetos;
using LM.Negocio.Validadores;
using LM.Repositorios;
using LM.Repositorios.Interfaces;

namespace LM.Servicos
{
    public class ServicoTipoDeVeiculo : IServicoTipoVeiculo
    {
        
        public void Cadastre(DtoTipoDeVeiculo tipoVeiculo)
        {
            var repositorioDeTipoDeVeiculo = FabricaDeRepositorios.Crie<IRepositorioTipoDeVeiculo>();
            var validadorDeTipoDeVeiculo = new ValidadorTipoDeVeiculo(repositorioDeTipoDeVeiculo);
            var tipoDeVeiculoObjeto = ConversorDeObjetos.Copie<TipoDeVeiculo>(tipoVeiculo);

            validadorDeTipoDeVeiculo.ValideCadastro(tipoDeVeiculoObjeto);

            repositorioDeTipoDeVeiculo.Cadastre(tipoDeVeiculoObjeto);
        }

        public void Atualize(DtoTipoDeVeiculo tipoDeVeiculo)
        {
            var repositorioTipoDeVeiculo = FabricaDeRepositorios.Crie<IRepositorioTipoDeVeiculo>();
            var validadorTipoDeVeiculo = new ValidadorTipoDeVeiculo(repositorioTipoDeVeiculo);
            var tipoDeVeiculoObjeto = ConversorDeObjetos.Copie<TipoDeVeiculo>(tipoDeVeiculo);

            validadorTipoDeVeiculo.ValideAtualizacao(tipoDeVeiculoObjeto);

            repositorioTipoDeVeiculo.Atualize(tipoDeVeiculoObjeto);
        }

        public void Exclua(int codigo)
        {
            var repositorioTipoVeiculo = FabricaDeRepositorios.Crie<IRepositorioTipoDeVeiculo>();
            var validadorTipoDeVeiculo = new ValidadorTipoDeVeiculo(repositorioTipoVeiculo);
            var tipoObjeto = ConversorDeObjetos.Copie<TipoDeVeiculo>(repositorioTipoVeiculo.Consulte(codigo));

            validadorTipoDeVeiculo.ValideExclusao(tipoObjeto);

            repositorioTipoVeiculo.Exclua(tipoObjeto);
        }

        public DtoTipoDeVeiculo Consulte(int codigo)
        {
            var tipoObjeto = FabricaDeRepositorios.Crie<IRepositorioTipoDeVeiculo>().Consulte(codigo);

            return ConversorDeObjetos.Copie<DtoTipoDeVeiculo>(tipoObjeto);
        }

        public IList<DtoTipoDeVeiculo> ConsulteTodos()
        {
            return ConversorDeObjetos.Copie<DtoTipoDeVeiculo, TipoDeVeiculo>(FabricaDeRepositorios.Crie<IRepositorioTipoDeVeiculo>().ConsulteTodos());
        }
    }
}
